package be.ipl.pigolo.usecases;

import java.util.List;

import javax.ejb.Remote;

import be.ipl.pigolo.domaine.Partie;
import be.ipl.pigolo.domaine.PartieFermier;

@Remote
public interface GestionPartie {

	/**
	 * Inscription au site
	 * 
	 * @param nomFermier
	 *            Nom du fermier
	 * @param motdepasse
	 *            Mot de passe du fermier
	 * @return boolean
	 */
	boolean inscrire(String nomFermier, String motdepasse);

	/**
	 * Inscription au site
	 * 
	 * @param nomFermier
	 *            Nom du fermier
	 * @param motdepasse
	 *            Mot de passe du fermier
	 * @return boolean
	 */
	boolean connexion(String nomFermier, String motdepasse);

	/**
	 * Déconnexion du site
	 * 
	 * @param nomFermier
	 *            Nom du fermier
	 * @return boolean
	 */
	boolean deconnexion(String nomFermier);

	/**
	 * Création d'une partie
	 * 
	 * @param nomPartie
	 *            Nom de la partie
	 * @param timerDebut
	 *            Timer avant le début de la partie
	 * @param timerTour
	 *            Timer avant le début du prochain tour
	 * @return boolean
	 */
	boolean creerPartie(String nomPartie, int timerTour);

	/**
	 * Permet à un fermier de rejoindre la partie
	 * 
	 * @param nomPartie
	 *            Nom de la partie
	 * @return boolean
	 */
	boolean rejoindrePartie(String nomPartie, String nomFermier);

	/**
	 * Listing des participants à une partie
	 * 
	 * @param nomPartie
	 *            Nom de la partie
	 * @return liste des participants
	 */
	List<PartieFermier> listerLesParticipants(String partie);

	/**
	 * Listing des parties
	 * 
	 * @return liste des parties
	 */
	List<Partie> listerLesParties();

	/**
	 * Prendre un cochon à la coordonnée donnée
	 * 
	 * @param x
	 *            Coordonnée en x
	 * @param y
	 *            Coordonnée en y
	 * @param nomFermier
	 *            Nom du fermier qui prend un cochon
	 * @return boolean
	 */
	boolean prendreCochon(int id_cochon, String nomPartie, String nomFermier);

	/**
	 * Quitte la partie en cours
	 * 
	 * @param nomPartie
	 *            Partie à quitter
	 * @return boolean
	 */
	boolean quitter(String nomPartie);

	/**
	 * Annuler la partie en cours
	 * 
	 * @param nomPartie
	 *            Partie à annuler
	 * @return boolean
	 */
	boolean annuler(String nomPartie);

	/**
	 * Renvoi la liste des évènements d'une partie
	 * 
	 * @param nomPartie
	 *            Partie concernée pour le journal
	 * @return Contenu du fichier journal de la partie
	 */
	String journal(String nomPartie);

	/**
	 * Liste toutes les parties des parties
	 * 
	 * @return liste de toutes les parties
	 */
	List<Partie> listerToutesLesParties();

	/**
	 * Renvoi l'état de la partie
	 * 
	 * @param nomPartie
	 *            Nom de la partie
	 * @return Etat de la partie
	 */
	String getEtat(String nomPartie);

	/**
	 * 
	 * @param nom
	 * @return
	 */
	Partie commencerPartie(String nom);

	Partie rechercherPartie(String nomPartie);

}
